# 编译后内核路径
KERNEL_DIR = /home/lss/work/kernel/imx6/ebf-buster-linux/build_image/build
# 定义框架
# ARCH 为 x86 时，编译链头为 
# ARCH 为 arm 时，编译链头为 arm-linux-gnueabihf-
ARCH = arm
ifeq ($(ARCH),x86)
CROSS_COMPILE = # 交叉编译工具头,如：
else
CROSS_COMPILE = arm-linux-gnueabihf-# 交叉编译工具头,如：arm-linux-gnueabihf-
endif
CC      = $(CROSS_COMPILE)gcc # 编译器，对 C 源文件进行编译处理，生成汇编文件

# 共享到sub-Makefile
export  ARCH  CROSS_COMPILE

# 路径
CURDIR := $(shell pwd)

# 注意:驱动目标不要和文件名相同
TARGET_DRV := led_device_driver
TARGET_APP := led_app

# 本次整个编译需要源 文件 和 目录
# 这里的“obj-m” 表示该模块不会编译到zImage ，但会生成一个独立的xxx.ko 静态编译（由内核源码顶层Makefile识别）
# 模块的多文件编译：obj-m 是告诉 makefile 最总的编译目标。而 $(TARGET)-y 则是告诉 makefile 该总目标依赖哪些目标文件。(也可以使用 xxx-objs)
INCDIR += /device
INCDIR += /driver
INCDIR += /include
$(TARGET_DRV)-y := led_module.o ./device/ledDevA.o ./driver/ledDrv.o
obj-m := $(TARGET_DRV).o
# obj-m += $(patsubst %.c,%.o,$(shell ls *.c))

# 编译条件处理
EXTRA_CFLAGS := $(foreach f,$(INCDIR),-I$(CURDIR)$(f))


# 第一个目标
all :
	$(MAKE) -C $(KERNEL_DIR) M=$(CURDIR) $(CFLAGS) modules
#	make mobailes 就是是编译模块，上面是其添加参数的指令
	$(CROSS_COMPILE)gcc -o $(TARGET_APP) $(TARGET_APP).c

    
# 清理
.PHONY:clean
clean:
	$(MAKE)  -C $(KERNEL_DIR) M=$(CURDIR) clean
	rm $(TARGET_APP)
